package com.ww.java8.fp.stream.onjava8.ch14;

import java.util.stream.Stream;

/**
 * Stream.iterate()产生的流的第一个元素是种子（iterate方法的第一个参数），然后将种子传递给方法（iterate方法的第二个参数）。
 * 方法运行的结果被添加到流（作为流的下一个元素），并被存储起来，作为下次调用iterate()方法时的第一个参数，以此类推。
 */
public class Fibonacci {

    int x = 1;

    Stream<Integer> numbers() {
        return Stream.iterate(0, i -> {
            int result = x + i;
            x = i;
            return result;
        });
    }

    public static void main(String[] args) {
        new Fibonacci().numbers()
                .skip(20) // 过滤前20个
                .limit(10) // 然后取10个
                .forEach(System.out::println);
    }
}
